
@GetMapping
    public ParallelFlux<Invoice> list(){
        System.out.println("La méthode list a été invoquée");
        Iterable<Invoice> invoices= invoiceService.getInvoiceList();
        final WebClient webClient=webClientBuilder.baseUrl("http://customer-service").build();

        List<Mono<Invoice>> monos=new ArrayList<>();

        invoices.forEach(invoice ->
            monos.add(webClient.get().uri("/customer/" + invoice.getIdCustomer())
                    .retrieve()
                    .bodyToMono(Customer.class)
                    .map(customer -> {
                        invoice.setCustomer(customer);
                        return invoice;
                    })
            )
        );

        Flux<Invoice> invoiceFlux=Flux.concat(monos);

        return invoiceFlux
                .parallel()
                .runOn(Schedulers.elastic());

    }

    @GetMapping("/{id}")
    public Invoice get(@PathVariable("id") String number){
        System.out.println("La méthode displayInvoice a été invoquée");
        Invoice invoice=invoiceService.getInvoiceByNumber(number);
        final WebClient webClient=webClientBuilder.build();
        final Mono<Customer> mono=webClient.get().uri("http://customer-service/customer/"+invoice.getIdCustomer())
                .retrieve()
                .bodyToMono(Customer.class);
        final Customer customer=mono.block();

        final Mono<Address> mono2=webClient.get().uri("http://customer-service/address/"+customer.getAddress().getId())
                .retrieve()
                .bodyToMono(Address.class);

        mono.subscribe(result -> invoice.setCustomer(result));

        final Address address=mono2.block();

        customer.setAddress(address);
        invoice.setCustomer(customer);
        return invoice;
    }